package editorsvg.editor.atributos;

import java.lang.reflect.Method;

/**
 *
 * @author Jorge Berjano
 */
public class MetaAtributo extends Atributo {

    public MetaAtributo() {
        super();
    }
    
    @Override
    protected void parsear(String texto) throws Exception {
        String[] asignaciones = texto.split(";");
        for (String asignacion : asignaciones) {
            procesarAsignacion(asignacion.trim());
        }
    }

    private void procesarAsignacion(String asignacion) {
        String[] operandos = asignacion.split(":");
        if (operandos.length == 2) {
            asignar(obtenerNombreCampo(operandos[0].trim()), operandos[1]);
        }

    }

    private void asignar(String nombreCampo, String valor) {
        Class clase = getClass();
        try {
            Method metodoGet = clase.getMethod(nombreCampo);
            Object objeto = metodoGet.invoke(this);
            if (objeto instanceof Atributo) {
                Atributo atributo = (Atributo) objeto;
                atributo.setTexto(valor.trim());
                atributo.setOrigen(Atributo.STYLE);
            }

        } catch (Exception ex) {
            System.err.println("No existe el campo " + nombreCampo + " de la clase " + clase);
        }
    }

    private String obtenerNombreCampo(String nombreAtributo) {
        String[] subnombres = nombreAtributo.split("-");
        if (subnombres.length <= 0) {
            return "";
        }
        
        StringBuilder nombreCampo = new StringBuilder();
        int posicionMayuscula = 0;
        for (String subnombre : subnombres) {
            if (subnombre.length() < 1) {
                continue;
            }
            nombreCampo.append(subnombre);
            if (posicionMayuscula > 0) {
                nombreCampo.setCharAt(posicionMayuscula,
                        Character.toUpperCase(nombreCampo.charAt(posicionMayuscula)));
            }                        
            posicionMayuscula = subnombre.length();
        }
        return nombreCampo.toString();
    }
}
